
// Correction constant value: 0.00220108032226562 (00000000101)

module cct_dda_8883 (Z, X, Y);
	
	input [7:0] Y;
	input [7:0] X;
	output [7:0] Z;
	
	wire [10:0] S;
	wire [10:0] C;
	wire [9:0] carry;
	
	// generate the partial products.
	wire N0_0_5;
	and pp1(N0_0_5, X[5], Y[0]);
	wire N0_0_6;
	and pp2(N0_0_6, X[6], Y[0]);
	wire N0_0_7;
	and pp3(N0_0_7, X[7], Y[0]);
	wire N0_1_5;
	and pp4(N0_1_5, X[4], Y[1]);
	wire N0_1_6;
	and pp5(N0_1_6, X[5], Y[1]);
	wire N0_1_7;
	and pp6(N0_1_7, X[6], Y[1]);
	wire N0_1_8;
	and pp7(N0_1_8, X[7], Y[1]);
	wire N0_2_5;
	and pp8(N0_2_5, X[3], Y[2]);
	wire N0_2_6;
	and pp9(N0_2_6, X[4], Y[2]);
	wire N0_2_7;
	and pp10(N0_2_7, X[5], Y[2]);
	wire N0_2_8;
	and pp11(N0_2_8, X[6], Y[2]);
	wire N0_2_9;
	and pp12(N0_2_9, X[7], Y[2]);
	wire N0_3_5;
	and pp13(N0_3_5, X[2], Y[3]);
	wire N0_3_6;
	and pp14(N0_3_6, X[3], Y[3]);
	wire N0_3_7;
	and pp15(N0_3_7, X[4], Y[3]);
	wire N0_3_8;
	and pp16(N0_3_8, X[5], Y[3]);
	wire N0_3_9;
	and pp17(N0_3_9, X[6], Y[3]);
	wire N0_3_10;
	and pp18(N0_3_10, X[7], Y[3]);
	wire N0_4_5;
	and pp19(N0_4_5, X[1], Y[4]);
	wire N0_4_6;
	and pp20(N0_4_6, X[2], Y[4]);
	wire N0_4_7;
	and pp21(N0_4_7, X[3], Y[4]);
	wire N0_4_8;
	and pp22(N0_4_8, X[4], Y[4]);
	wire N0_4_9;
	and pp23(N0_4_9, X[5], Y[4]);
	wire N0_4_10;
	and pp24(N0_4_10, X[6], Y[4]);
	wire N0_4_11;
	and pp25(N0_4_11, X[7], Y[4]);
	wire N0_5_5;
	and pp26(N0_5_5, X[0], Y[5]);
	wire N0_5_6;
	and pp27(N0_5_6, X[1], Y[5]);
	wire N0_5_7;
	and pp28(N0_5_7, X[2], Y[5]);
	wire N0_5_8;
	and pp29(N0_5_8, X[3], Y[5]);
	wire N0_5_9;
	and pp30(N0_5_9, X[4], Y[5]);
	wire N0_5_10;
	and pp31(N0_5_10, X[5], Y[5]);
	wire N0_5_11;
	and pp32(N0_5_11, X[6], Y[5]);
	wire N0_5_12;
	and pp33(N0_5_12, X[7], Y[5]);
	wire N0_6_6;
	and pp34(N0_6_6, X[0], Y[6]);
	wire N0_6_7;
	and pp35(N0_6_7, X[1], Y[6]);
	wire N0_6_8;
	and pp36(N0_6_8, X[2], Y[6]);
	wire N0_6_9;
	and pp37(N0_6_9, X[3], Y[6]);
	wire N0_6_10;
	and pp38(N0_6_10, X[4], Y[6]);
	wire N0_6_11;
	and pp39(N0_6_11, X[5], Y[6]);
	wire N0_6_12;
	and pp40(N0_6_12, X[6], Y[6]);
	wire N0_6_13;
	and pp41(N0_6_13, X[7], Y[6]);
	wire N0_7_7;
	and pp42(N0_7_7, X[0], Y[7]);
	wire N0_7_8;
	and pp43(N0_7_8, X[1], Y[7]);
	wire N0_7_9;
	and pp44(N0_7_9, X[2], Y[7]);
	wire N0_7_10;
	and pp45(N0_7_10, X[3], Y[7]);
	wire N0_7_11;
	and pp46(N0_7_11, X[4], Y[7]);
	wire N0_7_12;
	and pp47(N0_7_12, X[5], Y[7]);
	wire N0_7_13;
	and pp48(N0_7_13, X[6], Y[7]);
	wire N0_7_14;
	and pp49(N0_7_14, X[7], Y[7]);

	// PP Reduction
	// Elements from matrix 0 
	// Elements from matrix 1 
	// In matrix 1 adding HA to column 5 
	wire N2_0_5;
	wire N2_1_6;
	half_adder HA1(N2_1_6, N2_0_5, N0_0_5, N0_1_5);
	// In matrix 1 adding FA to column 6 
	wire N2_0_6;
	wire N2_1_7;
	full_adder FA1(N2_1_7, N2_0_6, N0_0_6, N0_1_6, N0_2_6);
	// In matrix 1 adding FA to column 7 
	wire N2_0_7;
	wire N2_1_8;
	full_adder FA2(N2_1_8, N2_0_7, N0_0_7, N0_1_7, N0_2_7);
	// In matrix 1 adding FA to column 7 
	wire N2_2_7;
	wire N2_3_8;
	full_adder FA3(N2_3_8, N2_2_7, N0_3_7, N0_4_7, N0_5_7);
	// In matrix 1 adding FA to column 8 
	wire N2_0_8;
	wire N2_1_9;
	full_adder FA4(N2_1_9, N2_0_8, N0_1_8, N0_2_8, N0_3_8);
	// In matrix 1 adding HA to column 8 
	wire N2_2_8;
	wire N2_3_9;
	half_adder HA2(N2_3_9, N2_2_8, N0_4_8, N0_5_8);
	// In matrix 1 adding FA to column 9 
	wire N2_0_9;
	wire N2_1_10;
	full_adder FA5(N2_1_10, N2_0_9, N0_2_9, N0_3_9, N0_4_9);
	// Elements from matrix 2 
	// In matrix 2 adding FA to column 5 
	wire N3_0_5;
	wire N3_1_6;
	full_adder FA6(N3_1_6, N3_0_5, N0_2_5, N0_3_5, N0_4_5);
	// In matrix 2 adding FA to column 6 
	wire N3_0_6;
	wire N3_1_7;
	full_adder FA7(N3_1_7, N3_0_6, N0_3_6, N0_4_6, N0_5_6);
	// In matrix 2 adding HA to column 6 
	wire N3_2_6;
	wire N3_3_7;
	half_adder HA3(N3_3_7, N3_2_6, N0_6_6, N2_0_6);
	// In matrix 2 adding FA to column 7 
	wire N3_0_7;
	wire N3_1_8;
	specialized_half_adder SHA1(N3_1_8, N3_0_7, N0_6_7, N0_7_7);
	// In matrix 2 adding FA to column 7 
	wire N3_2_7;
	wire N3_3_8;
	full_adder FA8(N3_3_8, N3_2_7, N2_0_7, N2_1_7, N2_2_7);
	// In matrix 2 adding FA to column 8 
	wire N3_0_8;
	wire N3_1_9;
	full_adder FA9(N3_1_9, N3_0_8, N0_6_8, N0_7_8, N2_0_8);
	// In matrix 2 adding FA to column 8 
	wire N3_2_8;
	wire N3_3_9;
	full_adder FA10(N3_3_9, N3_2_8, N2_1_8, N2_2_8, N2_3_8);
	// In matrix 2 adding FA to column 9 
	wire N3_0_9;
	wire N3_1_10;
	full_adder FA11(N3_1_10, N3_0_9, N0_5_9, N0_6_9, N0_7_9);
	// In matrix 2 adding FA to column 9 
	wire N3_2_9;
	wire N3_3_10;
	full_adder FA12(N3_3_10, N3_2_9, N2_0_9, N2_1_9, N2_3_9);
	// In matrix 2 adding FA to column 10 
	wire N3_0_10;
	wire N3_1_11;
	full_adder FA13(N3_1_11, N3_0_10, N0_3_10, N0_4_10, N0_5_10);
	// In matrix 2 adding FA to column 10 
	wire N3_2_10;
	wire N3_3_11;
	full_adder FA14(N3_3_11, N3_2_10, N0_6_10, N0_7_10, N2_1_10);
	// In matrix 2 adding FA to column 11 
	wire N3_0_11;
	wire N3_1_12;
	full_adder FA15(N3_1_12, N3_0_11, N0_4_11, N0_5_11, N0_6_11);
	// Elements from matrix 3 
	// In matrix 3 adding HA to column 5 
	wire N4_0_5;
	wire N4_1_6;
	assign N4_1_6 = N0_5_5;
	assign N4_0_5 = !N0_5_5;
	// In matrix 3 adding FA to column 6 
	wire N4_0_6;
	wire N4_1_7;
	full_adder FA16(N4_1_7, N4_0_6, N2_1_6, N3_0_6, N3_1_6);
	// In matrix 3 adding FA to column 7 
	wire N4_0_7;
	wire N4_1_8;
	full_adder FA17(N4_1_8, N4_0_7, N3_0_7, N3_1_7, N3_2_7);
	// In matrix 3 adding FA to column 8 
	wire N4_0_8;
	wire N4_1_9;
	full_adder FA18(N4_1_9, N4_0_8, N3_0_8, N3_1_8, N3_2_8);
	// In matrix 3 adding FA to column 9 
	wire N4_0_9;
	wire N4_1_10;
	full_adder FA19(N4_1_10, N4_0_9, N3_0_9, N3_1_9, N3_2_9);
	// In matrix 3 adding FA to column 10 
	wire N4_0_10;
	wire N4_1_11;
	full_adder FA20(N4_1_11, N4_0_10, N3_0_10, N3_1_10, N3_2_10);
	// In matrix 3 adding FA to column 11 
	wire N4_0_11;
	wire N4_1_12;
	full_adder FA21(N4_1_12, N4_0_11, N0_7_11, N3_0_11, N3_1_11);
	// In matrix 3 adding FA to column 12 
	wire N4_0_12;
	wire N4_1_13;
	full_adder FA22(N4_1_13, N4_0_12, N0_5_12, N0_6_12, N0_7_12);
	// Elements from matrix 4 
	// In matrix 4 adding HA to column 5 
	wire N5_0_5;
	wire N5_1_6;
	half_adder HA4(N5_1_6, N5_0_5, N2_0_5, N3_0_5);
	// In matrix 4 adding FA to column 6 
	wire N5_0_6;
	wire N5_1_7;
	full_adder FA23(N5_1_7, N5_0_6, N3_2_6, N4_0_6, N4_1_6);
	// In matrix 4 adding FA to column 7 
	wire N5_0_7;
	wire N5_1_8;
	full_adder FA24(N5_1_8, N5_0_7, N3_3_7, N4_0_7, N4_1_7);
	// In matrix 4 adding FA to column 8 
	wire N5_0_8;
	wire N5_1_9;
	full_adder FA25(N5_1_9, N5_0_8, N3_3_8, N4_0_8, N4_1_8);
	// In matrix 4 adding FA to column 9 
	wire N5_0_9;
	wire N5_1_10;
	full_adder FA26(N5_1_10, N5_0_9, N3_3_9, N4_0_9, N4_1_9);
	// In matrix 4 adding FA to column 10 
	wire N5_0_10;
	wire N5_1_11;
	full_adder FA27(N5_1_11, N5_0_10, N3_3_10, N4_0_10, N4_1_10);
	// In matrix 4 adding FA to column 11 
	wire N5_0_11;
	wire N5_1_12;
	full_adder FA28(N5_1_12, N5_0_11, N3_3_11, N4_0_11, N4_1_11);
	// In matrix 4 adding FA to column 12 
	wire N5_0_12;
	wire N5_1_13;
	full_adder FA29(N5_1_13, N5_0_12, N3_1_12, N4_0_12, N4_1_12);
	// In matrix 4 adding FA to column 13 
	wire N5_0_13;
	wire N5_1_14;
	full_adder FA30(N5_1_14, N5_0_13, N0_6_13, N0_7_13, N4_1_13);

	buf bufC0(C[0], N4_0_5);
	buf bufC1(C[1], N5_0_6);
	buf bufC2(C[2], N5_0_7);
	buf bufC3(C[3], N5_0_8);
	buf bufC4(C[4], N5_0_9);
	buf bufC5(C[5], N5_0_10);
	buf bufC6(C[6], N5_0_11);
	buf bufC7(C[7], N5_0_12);
	buf bufC8(C[8], N5_0_13);
	buf bufC9(C[9], N0_7_14);
	buf bufS0(S[0], N5_0_5);
	buf bufS1(S[1], N5_1_6);
	buf bufS2(S[2], N5_1_7);
	buf bufS3(S[3], N5_1_8);
	buf bufS4(S[4], N5_1_9);
	buf bufS5(S[5], N5_1_10);
	buf bufS6(S[6], N5_1_11);
	buf bufS7(S[7], N5_1_12);
	buf bufS8(S[8], N5_1_13);
	buf bufS9(S[9], N5_1_14);

	and CPA1(carry[0],C[0],S[0]);
	reduced_full_adder CPA2(carry[1],carry[0],C[1],S[1]);
	reduced_full_adder CPA3(carry[2],carry[1],C[2],S[2]);
	full_adder CPA4(carry[3],Z[0],carry[2],C[3],S[3]);
	full_adder CPA5(carry[4],Z[1],carry[3],C[4],S[4]);
	full_adder CPA6(carry[5],Z[2],carry[4],C[5],S[5]);
	full_adder CPA7(carry[6],Z[3],carry[5],C[6],S[6]);
	full_adder CPA8(carry[7],Z[4],carry[6],C[7],S[7]);
	full_adder CPA9(carry[8],Z[5],carry[7],C[8],S[8]);
	full_adder CPA10(Z[7],Z[6],carry[8],C[9],S[9]);
endmodule
